if (!require(plotly)) install.packages('plotly')
## Warning: package 'plotly' was built under R version 4.0.3
library(plotly)
if (!require(tidyverse)) install.packages('tidyverse')
library(tidyverse)
if (!require(readxl)) install.packages('readxl')
library(readxl)

burden <- read_excel("Apartment List Data -- Cost Burden 2019.xlsx", skip = 1)
burden <- select(burden, -12)
#View(burden)

Exercise 1

Insert any text here.

# Rename variables:
namelist <- c("N_Rent_Households",
              "Overall_Burden_Rate",
              "Moderate_Burden_Rate",
              "Severe_Burden_Rate",
              "N_Burden_Overall",
              "N_Burden_Moderate",
              "N_Burden_Severe",
              "Median_Rent",
              "Median_Renter_Income")
paste(namelist, "18", sep="_")
## [1] "N_Rent_Households_18"    "Overall_Burden_Rate_18" 
## [3] "Moderate_Burden_Rate_18" "Severe_Burden_Rate_18"  
## [5] "N_Burden_Overall_18"     "N_Burden_Moderate_18"   
## [7] "N_Burden_Severe_18"      "Median_Rent_18"         
## [9] "Median_Renter_Income_18"
names(burden) <- c("Location",
                   "Type",
                   paste(namelist, "18", sep="_"),
                   paste(namelist, "17", sep="_"),
                   paste(namelist, "08", sep="_"),
                   paste(namelist, "change_17_18", sep="_"),
                   paste(namelist, "change_08_18", sep="_"))

named_cities <- burden %>%
  filter(Location %in% c("New York, NY",
                         "Los Angeles, CA",
                         "San Francisco, CA",
                         "San Diego, CA",
                         "Miami, FL",
                         "Riverside, CA",
                         "New Orleans, LA",
                         "Vineland, NJ",
                         "Ocean City, NJ")) 

named_cities <- filter(named_cities, Type == "Metro")

## Put it all together:
myplot <- burden %>%
  filter(Type == "Metro" & Median_Renter_Income_18 > 0) %>%
  ggplot(aes(x=Median_Renter_Income_18, y=Median_Rent_18, ids = Location)) +
  geom_point(aes(color = Overall_Burden_Rate_18)) +
  #What we wanted to do was display a line of where 30% income was
  #where any point above that line was cost burdened
  #and anything below was not. But we couldn't get the line to display
  #for us. 
  geom_line(mapping = aes(x = Median_Renter_Income_18, 
                          y = (Median_Renter_Income_18*.3)/12 ), 
                          color = "white") +
  scale_y_log10(breaks = c(500, 1000, 1500, 2000),
                labels = c("500", "1K", "1.5K", "2K"),
                minor_breaks=NULL) +
  labs(title="THE U.S. CITIES WITH\nTHE BIGGEST COST BURDENS",
       subtitle=
         "Apartment List analyzed which cities have the worst income-to-rent ratios.",
       caption = "Source: Apartment List and Yahoo Finance") +
  labs(color = "Cost Burden Rate" ) +
  xlab("MEDIAN RENTER INCOME 2018") +
  ylab("MEDIAN RENT 2018") +
  scale_color_gradient(low="yellow", high="red") +
 # guides(color=FALSE) +
  theme(plot.background = element_rect(fill = "#1F0E42")) +
  theme(panel.background = element_rect(fill = "#1F0E42")) +
  theme(title = element_text(color = "white")) +
  theme(axis.text = element_text(color = "white")) +
  theme(plot.title = element_text(hjust=0.5, size = 25)) + 
  theme(plot.subtitle = element_text(hjust=0.5)) 
ggplotly(myplot, tooltip = "ids")
# Save the graph
png("myplot.png", width=6, height=6, res=300, units="in")
myplot
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
dev.off()
## png 
##   2

Exercise 2

LS0tDQp0aXRsZTogIk9jdG9iZXIgMjYgSW4gQ2xhc3MgV29yayINCmF1dGhvcjogIkR1bmNhbiBIb29rLCBBbmRyZXcgTWNMYWluLEFyeWFuIEtob3JyYW0iDQpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiDQpvdXRwdXQ6IG9wZW5pbnRybzo6bGFiX3JlcG9ydA0KLS0tDQoNCmBgYHtyIGxvYWQtcGFja2FnZXMsIG1lc3NhZ2U9RkFMU0V9DQppZiAoIXJlcXVpcmUocGxvdGx5KSkgaW5zdGFsbC5wYWNrYWdlcygncGxvdGx5JykNCmxpYnJhcnkocGxvdGx5KQ0KaWYgKCFyZXF1aXJlKHRpZHl2ZXJzZSkpIGluc3RhbGwucGFja2FnZXMoJ3RpZHl2ZXJzZScpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmlmICghcmVxdWlyZShyZWFkeGwpKSBpbnN0YWxsLnBhY2thZ2VzKCdyZWFkeGwnKQ0KbGlicmFyeShyZWFkeGwpDQoNCmJ1cmRlbiA8LSByZWFkX2V4Y2VsKCJBcGFydG1lbnQgTGlzdCBEYXRhIC0tIENvc3QgQnVyZGVuIDIwMTkueGxzeCIsIHNraXAgPSAxKQ0KYnVyZGVuIDwtIHNlbGVjdChidXJkZW4sIC0xMikNCiNWaWV3KGJ1cmRlbikNCg0KDQpgYGANCg0KIyMjIEV4ZXJjaXNlIDENCg0KSW5zZXJ0IGFueSB0ZXh0IGhlcmUuDQoNCmBgYHtyIGNvZGUtY2h1bmstbGFiZWx9DQojIFJlbmFtZSB2YXJpYWJsZXM6DQpuYW1lbGlzdCA8LSBjKCJOX1JlbnRfSG91c2Vob2xkcyIsDQogICAgICAgICAgICAgICJPdmVyYWxsX0J1cmRlbl9SYXRlIiwNCiAgICAgICAgICAgICAgIk1vZGVyYXRlX0J1cmRlbl9SYXRlIiwNCiAgICAgICAgICAgICAgIlNldmVyZV9CdXJkZW5fUmF0ZSIsDQogICAgICAgICAgICAgICJOX0J1cmRlbl9PdmVyYWxsIiwNCiAgICAgICAgICAgICAgIk5fQnVyZGVuX01vZGVyYXRlIiwNCiAgICAgICAgICAgICAgIk5fQnVyZGVuX1NldmVyZSIsDQogICAgICAgICAgICAgICJNZWRpYW5fUmVudCIsDQogICAgICAgICAgICAgICJNZWRpYW5fUmVudGVyX0luY29tZSIpDQpwYXN0ZShuYW1lbGlzdCwgIjE4Iiwgc2VwPSJfIikNCm5hbWVzKGJ1cmRlbikgPC0gYygiTG9jYXRpb24iLA0KICAgICAgICAgICAgICAgICAgICJUeXBlIiwNCiAgICAgICAgICAgICAgICAgICBwYXN0ZShuYW1lbGlzdCwgIjE4Iiwgc2VwPSJfIiksDQogICAgICAgICAgICAgICAgICAgcGFzdGUobmFtZWxpc3QsICIxNyIsIHNlcD0iXyIpLA0KICAgICAgICAgICAgICAgICAgIHBhc3RlKG5hbWVsaXN0LCAiMDgiLCBzZXA9Il8iKSwNCiAgICAgICAgICAgICAgICAgICBwYXN0ZShuYW1lbGlzdCwgImNoYW5nZV8xN18xOCIsIHNlcD0iXyIpLA0KICAgICAgICAgICAgICAgICAgIHBhc3RlKG5hbWVsaXN0LCAiY2hhbmdlXzA4XzE4Iiwgc2VwPSJfIikpDQoNCm5hbWVkX2NpdGllcyA8LSBidXJkZW4gJT4lDQogIGZpbHRlcihMb2NhdGlvbiAlaW4lIGMoIk5ldyBZb3JrLCBOWSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIkxvcyBBbmdlbGVzLCBDQSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIlNhbiBGcmFuY2lzY28sIENBIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAiU2FuIERpZWdvLCBDQSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIk1pYW1pLCBGTCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIlJpdmVyc2lkZSwgQ0EiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICJOZXcgT3JsZWFucywgTEEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICJWaW5lbGFuZCwgTkoiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICJPY2VhbiBDaXR5LCBOSiIpKSANCg0KbmFtZWRfY2l0aWVzIDwtIGZpbHRlcihuYW1lZF9jaXRpZXMsIFR5cGUgPT0gIk1ldHJvIikNCg0KIyMgUHV0IGl0IGFsbCB0b2dldGhlcjoNCm15cGxvdCA8LSBidXJkZW4gJT4lDQogIGZpbHRlcihUeXBlID09ICJNZXRybyIgJiBNZWRpYW5fUmVudGVyX0luY29tZV8xOCA+IDApICU+JQ0KICBnZ3Bsb3QoYWVzKHg9TWVkaWFuX1JlbnRlcl9JbmNvbWVfMTgsIHk9TWVkaWFuX1JlbnRfMTgsIGlkcyA9IExvY2F0aW9uKSkgKw0KICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IE92ZXJhbGxfQnVyZGVuX1JhdGVfMTgpKSArDQogICNXaGF0IHdlIHdhbnRlZCB0byBkbyB3YXMgZGlzcGxheSBhIGxpbmUgb2Ygd2hlcmUgMzAlIGluY29tZSB3YXMNCiAgI3doZXJlIGFueSBwb2ludCBhYm92ZSB0aGF0IGxpbmUgd2FzIGNvc3QgYnVyZGVuZWQNCiAgI2FuZCBhbnl0aGluZyBiZWxvdyB3YXMgbm90LiBCdXQgd2UgY291bGRuJ3QgZ2V0IHRoZSBsaW5lIHRvIGRpc3BsYXkNCiAgI2ZvciB1cy4gDQogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKHggPSBNZWRpYW5fUmVudGVyX0luY29tZV8xOCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSAoTWVkaWFuX1JlbnRlcl9JbmNvbWVfMTgqLjMpLzEyICksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJ3aGl0ZSIpICsNCiAgc2NhbGVfeV9sb2cxMChicmVha3MgPSBjKDUwMCwgMTAwMCwgMTUwMCwgMjAwMCksDQogICAgICAgICAgICAgICAgbGFiZWxzID0gYygiNTAwIiwgIjFLIiwgIjEuNUsiLCAiMksiKSwNCiAgICAgICAgICAgICAgICBtaW5vcl9icmVha3M9TlVMTCkgKw0KICBsYWJzKHRpdGxlPSJUSEUgVS5TLiBDSVRJRVMgV0lUSFxuVEhFIEJJR0dFU1QgQ09TVCBCVVJERU5TIiwNCiAgICAgICBzdWJ0aXRsZT0NCiAgICAgICAgICJBcGFydG1lbnQgTGlzdCBhbmFseXplZCB3aGljaCBjaXRpZXMgaGF2ZSB0aGUgd29yc3QgaW5jb21lLXRvLXJlbnQgcmF0aW9zLiIsDQogICAgICAgY2FwdGlvbiA9ICJTb3VyY2U6IEFwYXJ0bWVudCBMaXN0IGFuZCBZYWhvbyBGaW5hbmNlIikgKw0KICBsYWJzKGNvbG9yID0gIkNvc3QgQnVyZGVuIFJhdGUiICkgKw0KICB4bGFiKCJNRURJQU4gUkVOVEVSIElOQ09NRSAyMDE4IikgKw0KICB5bGFiKCJNRURJQU4gUkVOVCAyMDE4IikgKw0KICBzY2FsZV9jb2xvcl9ncmFkaWVudChsb3c9InllbGxvdyIsIGhpZ2g9InJlZCIpICsNCiAjIGd1aWRlcyhjb2xvcj1GQUxTRSkgKw0KICB0aGVtZShwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICIjMUYwRTQyIikpICsNCiAgdGhlbWUocGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIiMxRjBFNDIiKSkgKw0KICB0aGVtZSh0aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJ3aGl0ZSIpKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJ3aGl0ZSIpKSArDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3Q9MC41LCBzaXplID0gMjUpKSArIA0KICB0aGVtZShwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0PTAuNSkpIA0KZ2dwbG90bHkobXlwbG90LCB0b29sdGlwID0gImlkcyIpDQoNCiMgU2F2ZSB0aGUgZ3JhcGgNCnBuZygibXlwbG90LnBuZyIsIHdpZHRoPTYsIGhlaWdodD02LCByZXM9MzAwLCB1bml0cz0iaW4iKQ0KbXlwbG90DQpkZXYub2ZmKCkNCmBgYA0KDQojIyMgRXhlcmNpc2UgMg0KDQouLi4NCg0K